package com.peanut.car.service;

import java.util.List;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


import com.peanut.car.mapper.CarMapper;
import com.peanut.common.pojo.Car;
import com.peanut.common.utils.MapperUtil;
import com.peanut.common.vo.EasyUIResult;

import redis.clients.jedis.JedisCluster;

@Service
public class CarService {
	
	@Autowired
	private CarMapper carMapper;

	/**
	 * 分页查询
	 * @param page
	 * @param rows
	 * @return
	 */
	public EasyUIResult queryCarsByPage(Integer page, Integer rows) {
		//准备EasyUIResult对象,有两个属性,total是记录的总条数,rows是List<String>类型,
		//存放查询到的结果
		EasyUIResult result = new EasyUIResult();
		//商品总数
		int total = carMapper.queryTotalCount();
		result.setTotal(total);//total是js计算显示页数
		//select * from t_product limit #{start},#{rows}; 
		//sql语句中的start
		int start = (page-1)*rows;
		//将这一页的rows条数据封装到List中
		List<Car> cList = carMapper.queryCars(start,rows);
		result.setRows(cList);
		return result;
		
	}
	/**
	 * 车辆分类查询
	 * @param car
	 * @return
	 */
	public EasyUIResult queryCars(Car car) {
		EasyUIResult result = new EasyUIResult();
		result.setTotal(0);
		List<Car> cList = carMapper.selectCars(car);
		result.setRows(cList);
		return result;
	}
	
	/**
	 * 车辆按价格查询
	 * @param carModel
	 * @return
	 */
	public EasyUIResult queryCarsByPrice(String carPrice) {
		int minPrice = Integer.parseInt(carPrice.split("-")[0]);
		int maxPrice = Integer.parseInt(carPrice.split("-")[1]);
		//System.out.println(minPrice+"  "+maxPrice);
		EasyUIResult result = new EasyUIResult();
		result.setTotal(0);
		List<Car> cList = carMapper.selectCarsByPrice(minPrice,maxPrice);
		result.setRows(cList);
		return result;
	}
	
	
	
	/**
	 * 单个商品查询
	 * @param productId
	 * @return
	 */
	/*@Autowired
	private JedisCluster cluster;*/
	public Car queryOneCar(String carId) {
		
		return carMapper.selectCarById(carId);
		/**
		 * 1.根据生成对应业务逻辑的key值
		 * 2.判断key在redis中是否存在
		 * 		不存在，实现持久层调用，将数据存放到redis一份，将数据返回
		 * 		存在，解析数据返回，不需要调用持久层
		 */
		/*String carQueryKey = "car_query_"+carId;
		//添加锁判断的逻辑，判断此商品是否有锁--redis中是否存在此key-value数据
		String carLock = "car_"+carId+".lock";
		if(cluster.exists(carLock)){
			//该商品由于其他更优先的权限操作（例如修改此商品），被锁住
			//如果要查询此商品需要到数据库中查询
			return carMapper.selectCarById(carId);
		}
		try{
			if(cluster.exists(carQueryKey)){
				//说明数据缓存命中，直接解析返回
				String carJson = cluster.get(carQueryKey);
				//反序列化
				Car car = MapperUtil.MP.readValue(carJson, Car.class);
				return car;
			}else{
				//说明缓存没有数据
				//需要查询数据库
				Car car = carMapper.selectCarById(carId);
				//解析成json，放到缓存中
				String carJson = MapperUtil.MP.writeValueAsString(car);
				//为了后续调用，可以访问缓存逻辑
				//将数据放到redis
				cluster.setex(carQueryKey, 60*60*2, carJson);
				return car;
			}
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}*/
		
	}
	
	
}









